package controllers;

import play.mvc.*;
import play.data.*;
import static play.data.Form.*;
import play.*;

import views.html.pageErreurConnexion;
import views.html.ConsoleAdmin.*;

import models.*;

/**
 * Manage a database of choixs
 */
public abstract class AdminChoix extends Controller {

	/**
	 * This result directly redirect to application home.
	 */
	public final static Result GO_HOME = redirect(routes.AdminChoix.listChoix(
			0, "id_choix", "asc", ""));

	/**
	 * Handle default path requests, redirect to choixs list
	 */
	public static Result indexChoix() {
		if (Application.estAdmin()) {

			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Display the paginated list of choixs.
	 * 
	 * @param page
	 *            Current page number (starts from 0)
	 * @param sortBy
	 *            Column to be sorted
	 * @param order
	 *            Sort order (either asc or desc)
	 * @param filter
	 *            Filter applied on choix names
	 */
	public static Result listChoix(final int page, final String sortBy,
			final String order, final String filter) {
		if (Application.estAdmin()) {

			return ok(listChoix.render(
					Choix.page(page, 15, sortBy, order, filter), sortBy, order,
					filter));
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Display the 'edit form' of a existing Choix.
	 * 
	 * @param id
	 *            Id of the choix to edit
	 */
	public static Result editChoix(final Long id) {
		if (Application.estAdmin()) {
			final Form<Choix> choixForm = form(Choix.class).fill(
					Choix.findById(id));
			return ok(editChoix.render(id, choixForm));
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Handle the 'edit form' submission
	 * 
	 * @param id
	 *            Id of the choix to edit
	 */
	public static Result updateChoix(final Long id) {
		if (Application.estAdmin()) {
			final Form<Choix> choixForm = form(Choix.class).bindFromRequest();
			if (choixForm.hasErrors()) {
				return badRequest(editChoix.render(id, choixForm));
			}

			choixForm.get().update(id);
			flash("success", "Choix " + choixForm.get().getDescriptifChoix()
					+ " has been updated");
			Logger.debug("Mise à jour choix : " + choixForm.get().getIdChoix()
					+ " " + choixForm.get().getDescriptifChoix() + " par user "
					+ session().get("id"));
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Display the 'new choix form'.
	 */
	public static Result createChoix() {
		if (Application.estAdmin()) {
			final Form<Choix> choixForm = form(Choix.class);
			return ok(createChoix.render(choixForm));
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Handle the 'new choix form' submission
	 */
	public static Result saveChoix() {
		if (Application.estAdmin()) {
			final Form<Choix> choixForm = form(Choix.class).bindFromRequest();
			if (choixForm.hasErrors()) {
				return badRequest(createChoix.render(choixForm));
			}
			choixForm.get().save();
			flash("success", "Choix " + choixForm.get().getDescriptifChoix()
					+ " has been created");
			Logger.debug("Création choix : " + choixForm.get().getIdChoix()
					+ " " + choixForm.get().getDescriptifChoix()
					+ " pour question "
					+ choixForm.get().getQuestion().getIdQuestion()
					+ " par user " + session().get("id"));
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

	/**
	 * Handle choix deletion
	 */
	public static Result deleteChoix(final Long id) {
		if (Application.estAdmin()) {
			final Choix c = Choix.findById(id);
			flash("success", "Choix has been deleted");
			Logger.debug("Suppression choix : " + c.getIdChoix() + " "
					+ c.getDescriptifChoix() + " pour question "
					+ c.getQuestion().getIdQuestion() + " par user "
					+ session().get("id"));
			Chapitre.delete(id);
			return GO_HOME;
		} else
			return ok(pageErreurConnexion.render());
	}

}
